const dayjs = require('dayjs');
const { observable, action } = require('mobx-miniprogram');

// 工具模块Store
export const toolsStore = observable({
  // 工具列表数据
  toolsList: [],
  
  // 常用工具
  frequentTools: [],
  
  // 工具分类
  categories: [],
  
  // 当前选中的工具
  currentTool: null,
  
  // 工具搜索条件
  filter: {
    category: '',
    searchKey: ''
  },
  
  // 使用历史
  usageHistory: [],
  
  // 页面加载状态
  loading: false,
  
  // 计算属性：筛选后的工具列表
  get filteredTools() {
    if (!this.toolsList.length) return [];
    
    let filtered = [...this.toolsList];
    
    // 根据分类筛选
    if (this.filter.category) {
      filtered = filtered.filter(t => t.category === this.filter.category);
    }
    
    // 根据关键词搜索
    if (this.filter.searchKey) {
      const key = this.filter.searchKey.toLowerCase();
      filtered = filtered.filter(t => 
        t.name.toLowerCase().includes(key) || 
        t.description.toLowerCase().includes(key) ||
        (t.tags && t.tags.some(tag => tag.toLowerCase().includes(key)))
      );
    }
    
    return filtered;
  },
  
  // 计算属性：按分类分组的工具列表
  get toolsByCategory() {
    const result = {};
    
    this.categories.forEach(category => {
      result[category.id] = this.toolsList.filter(tool => tool.category === category.id);
    });
    
    return result;
  },
  
  // Action: 设置工具列表
  setToolsList: action(function(tools) {
    this.toolsList = tools;
    this.updateFrequentTools();
  }),
  
  // Action: 设置工具分类
  setCategories: action(function(categories) {
    this.categories = categories;
  }),
  
  // Action: 设置当前工具
  setCurrentTool: action(function(toolId) {
    this.currentTool = this.toolsList.find(t => t._id === toolId) || null;
    
    // 如果找到工具，记录使用历史
    if (this.currentTool) {
      this.recordToolUsage(this.currentTool._id);
    }
  }),
  
  // Action: 记录工具使用
  recordToolUsage: action(function(toolId) {
    // 检查是否已存在于历史记录中
    const existingIndex = this.usageHistory.findIndex(h => h.toolId === toolId);
    
    const now = dayjs();
    
    if (existingIndex >= 0) {
      // 已存在，更新使用次数和最后使用时间
      this.usageHistory[existingIndex].useCount++;
      this.usageHistory[existingIndex].lastUsed = now;
    } else {
      // 不存在，添加新记录
      this.usageHistory.push({
        toolId,
        useCount: 1,
        firstUsed: now,
        lastUsed: now
      });
    }
    
    // 更新常用工具列表
    this.updateFrequentTools();
  }),
  
  // Action: 更新常用工具列表
  updateFrequentTools: action(function() {
    // 按使用次数排序
    const sortedHistory = [...this.usageHistory].sort((a, b) => b.useCount - a.useCount);
    
    // 获取前5个常用工具
    this.frequentTools = sortedHistory.slice(0, 5).map(h => {
      return this.toolsList.find(t => t._id === h.toolId);
    }).filter(t => t); // 过滤掉可能不存在的工具
  }),
  
  // Action: 设置过滤条件
  setFilter: action(function(filter) {
    this.filter = {...this.filter, ...filter};
  }),
  
  // Action: 清空过滤条件
  clearFilter: action(function() {
    this.filter = {
      category: '',
      searchKey: ''
    };
  }),
  
  // Action: 设置加载状态
  setLoading: action(function(loading) {
    this.loading = loading;
  })
}); 